﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;
using Ent.Inscripcion.Core.Core;
using Ent.Inscripcion.Core;
using System.Configuration;
using Ent.Inscripcion.Core.Administracion;

namespace Ent.Inscripcion.Presentacion
{
    public partial class SolicitarTutoria : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!X.IsAjaxRequest)
                {
                    ////Carga de horarioTutorias de dias
                    stoDias.DataSource = DiaLista.GetLista("DIAS");
                    stoDias.DataBind();
                    //Carga de horarioTutorias de Niveles
                    stoNiveles.DataSource = CatalogoItemLista.GetListaCatalogos("NIVEL");
                    stoNiveles.DataBind();
                    //Carga de solicitudes
                    var estudiante = Session["Estudiante"] as Estudiante;
                    CargarSolicitudesTutorias(estudiante.Id.ToString());
                }
            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
            }
        }

        protected void btnCrearTutoria_Click(object sender, DirectEventArgs e)
        {
            try
            {
                controlVerificaPago.Mostrar(1);
                e.Success = true;
            }
            catch (Exception ex)
            {
                
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }

        protected void btnBuscar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var criterioHorario = HorarioTutoriaCriterio.NewHorarioTutoriaCriterio();
                criterioHorario.DiaId = e.ExtraParams["Dia"];
                criterioHorario.NivelId = e.ExtraParams["Nivel"];

                CargarDatos(criterioHorario);
                e.Success = true;
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex.ToString());
            }
        }

        protected void ManejarAccion(object sender, DirectEventArgs e)
        {
            try
            {                
                Guid idHorarioTutoria = Guid.Parse(e.ExtraParams["Id"]);
                string opcion = e.ExtraParams["Comando"];
                var horarioTutoria = HorarioTutoria.GetHorarioTutoria(idHorarioTutoria);
                hidHI.SetValue(e.ExtraParams["HoraInicio"]);
                hidHF.SetValue(e.ExtraParams["HoraFin"]);
                hidDia.SetValue(e.ExtraParams["Dia"]);
                hidNivel.SetValue(e.ExtraParams["Nivel"]);
                hidAula.SetValue(e.ExtraParams["Aula"]);
                DatosHorarioTutoria(e.ExtraParams["Aula"],e.ExtraParams["Paralelo"], horarioTutoria);

                var verificaCupos = VerificarHorarioTutoriaCmd.Execute(e.ExtraParams["Id"]);
                                
                e.ExtraParamsResponse["ErrorCupo"] = verificaCupos.Result?"0":"1";
                e.Success = true;
            }
            catch (Exception ex)
            {
                
                e.Success = false;
                Util.RegistarLog(ex.ToString());
            }
        }

        private void DatosHorarioTutoria(string aula,string paralelo, HorarioTutoria horarioTutoria)
        {
            cbxDiaS.SetValue(horarioTutoria.DiaId);
            cbxNivelS.SetValue(horarioTutoria.NivelId);
            tfHoraInicio.SetValue(horarioTutoria.HoraInicio);
            tfHoraFin.SetValue(horarioTutoria.HoraFin);
            txtAula.Text = aula;
            txtParalelo.Text = paralelo;
            hidIdTutoria.Text = horarioTutoria.Id.ToString();
        }

        protected void btnGuardar_Click(object sender, DirectEventArgs e)
        {
            int aux = 0;
            try
            {
                string id = e.ExtraParams["Id"];
                string idHorario = e.ExtraParams["IdHorario"];
                string accion = e.ExtraParams["Accion"];
                
                RegistroTutoria registroTutoria = null;

                registroTutoria = accion == "Nuevo" ? RegistroTutoria.NewRegistroTutoria() : RegistroTutoria.GetRegistroTutoria(Guid.Parse(id));

                var estudiante = Session["Estudiante"] as Estudiante;
                var infoFactura = Session["InfoFactura"] as InfoFactura;
                var horario = HorarioTutoria.GetHorarioTutoria(Guid.Parse(idHorario));
                
                registroTutoria.EstudianteId = estudiante.Id.ToString();
                registroTutoria.Fecha = DateTime.Now;                
                registroTutoria.HorarioId = horario.Id.ToString();
                registroTutoria.NivelId = horario.NivelId;
                if (accion == "Nuevo")
                {
                    registroTutoria.NumeroFactura = infoFactura.NumeroFactura;
                    registroTutoria.Item = infoFactura.Item;
                    registroTutoria.Identificacion = infoFactura.Identificacion;
                    registroTutoria.FechaPago = infoFactura.Fecha;
                }
                registroTutoria.Save();
                e.Success = true;
                //Estimado estudiante el horario para la tutoría del nivel {0} es {1} a las {2} en el aula {3}
                aux = 1;
                EnviarMail(e, estudiante);
                CargarSolicitudesTutorias(estudiante.Id.ToString());
                e.Success = true;
            }
            catch (Exception ex)
            {
                if (aux==0)
                {
                    e.Success = false;
                }
                
                Util.RegistarLog(ex.ToString());
            }
        }

        private void EnviarMail(DirectEventArgs e, Estudiante estudiante)
        {
            try
            {var cuerpoMensaje = string.Format(ManejadorRecursos.GetRecurso("MensajeInsTutoria"), e.ExtraParams["Nivel"], e.ExtraParams["Dia"], e.ExtraParams["HoraInicio"], e.ExtraParams["HoraFin"], e.ExtraParams["Aula"]);
            var envioEmail = new EnvioEmail();
            envioEmail.EnviarEmail(estudiante.Email, "Horario Tutoría", cuerpoMensaje);
            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
            }
        }
        
        /// <summary>
        /// Verifica la edicion del horario seleccionado para una tutoria
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gdpSolTutorias_Command(object sender, DirectEventArgs e)
        {
            try
            {
                string id = e.ExtraParams["Id"];
                hidIdSolicitud.Text = id;
                var tutoria = RegistroTutoria.GetRegistroTutoria(Guid.Parse(id));
                var horarioTutoria = HorarioTutoria.GetHorarioTutoria(Guid.Parse(tutoria.HorarioId));
                var criterioHorario = HorarioTutoriaCriterio.NewHorarioTutoriaCriterio();
                criterioHorario.NivelId = horarioTutoria.NivelId;

                CargarDatos(criterioHorario);
                var horarios = stoTutorias.DataSource as HorarioTutoriaLista;
                var horario = horarios.First(h => h.Id == horarioTutoria.Id);
                DatosHorarioTutoria(horario.Aula, horario.Paralelo, horarioTutoria);
                e.ExtraParamsResponse["Opcion"] = "1";
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
        private void CargarDatos(HorarioTutoriaCriterio criterio)
        {
            stoTutorias.DataSource = HorarioTutoriaLista.GetHorarioTutoriaLista(criterio);
            stoTutorias.DataBind();
        }

        void CargarSolicitudesTutorias(string id)
        {
            var listaSolicitudes = RegistroTutoriaLista.GetRegistroTutoriaLista(id);
            stoSolTutorias.DataSource = listaSolicitudes;
            stoSolTutorias.DataBind();
        }
    }
}